package com.sinosoft.sinopay.apiservise.chinapay.util;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.Properties;

import org.apache.commons.io.FileUtils;

import com.alibaba.dubbo.common.utils.StringUtils;

/**
 * 
 * 【配置文件工具类】
 * @Description: 配置文件工具类
 * @author liuyjsh@sinosoft.com.cn
 * @date 2016年6月2日 下午2:11:28 
 * @version V1.0
 */
public class PropertyFileUtils {
	private static Properties prop =null;
	
	public static void init(String propertyFileName){
		init(propertyFileName , prop);
	}
	
	public static void init(URL url) {
		init(url, prop);
	}
	
	public static void init(String propertyFileName, Properties defaultProperties) {
		File propertyFile = new File(propertyFileName);
		if (propertyFile.exists()) {
			try {
				prop = new Properties(defaultProperties);
				prop.load(FileUtils.openInputStream(propertyFile));
			} catch (IOException e) {
				e.printStackTrace();
			}
		} else {
			System.out.println(propertyFileName + "配置文件没有找到");
		}
	}
	
	public static void init(URL fileUrl, Properties defaultProperties) {
		try {
			prop = new Properties(defaultProperties);
			prop.load(fileUrl.openStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 
	 * 得到包含配置信息的Properties对象
	 * @Title: getConfigProperty 
	 * @Description: 得到包含配置信息的Properties对象
	 * @return  Properties对象
	 */
	public Properties getConfigProperty() {
		return prop;
	}
	
	/**
	 * 
	 * 根据配置节点名得到配置值
	 * @Title: getConfig 
	 * @Description: 根据配置节点名得到配置值
	 * @param key  配置节点名
	 * @param defaul   默认值
	 * @param isLog   是否写日志。如果为true且返回的配置值为null，则写日志
	 * @return  如果有配置值，则返回配置值，否则返回默认值
	 */
	public static String getConfig(String key, String defaul, boolean isLog) {
		String keyVal = prop.getProperty(key);
		if (keyVal == null && isLog) {
		}
		if (keyVal == null) {
			keyVal = defaul;
		}
		if (keyVal != null && keyVal.endsWith("\""))
			keyVal = keyVal.replaceAll("\"", "");
		return keyVal;
	}
	
	/**
	 * 
	 * 根据配置节点名得到配置值
	 * @Title: getConfig 
	 * @Description: 根据配置节点名得到配置值
	 * @param key	配置节点名
	 * @param defaul	默认值
	 * @return	如果有配置值，则返回配置值，否则返回默认值
	 */
	public static String getConfig(String key, String defaul) {
		return getConfig(key, defaul, false);
	}

	/**
	 * 
	 * 根据配置节点名得到配置值
	 * @Title: getConfig 
	 * @Description: 根据配置节点名得到配置值
	 * @param key	配置节点名
	 * @return  配置值
	 */
	public static String getConfig(String key) {
		return getConfig(key, null, false);
	}

	/**
	 * 
	 * 根据配置节点名得到配置值
	 * @Title: getConfig 
	 * @Description: 根据配置节点名得到配置值
	 * @param key	配置节点名
	 * @param islog	是否写日志。如果为true且返回的配置值为null，则写日志
	 * @return	配置值
	 */
	public static  String getConfig(String key, boolean islog) {
		return getConfig(key, null, islog);
	}
	
	public static Properties getProperties() {
		return prop;
	}
	
	public static String getConfig(String key, String defaultEncoding, String encoding) {
		String value = "";
		try {
			if(StringUtils.isBlank(defaultEncoding)){
				defaultEncoding = "ISO8859-1";
			}
			value = new String(getConfig(key, null, false).getBytes(defaultEncoding), encoding);
		} catch (UnsupportedEncodingException e) {
			//
		}
		return value;
	}
	
}
